package com.zerosky.crm.util;

import java.io.IOException;

import org.apache.tools.ant.types.CommandlineJava.SysProperties;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zerosky.crm.po.AccessToken;

/** 
 * Oauth2类 
 * @author Engineer.Jsp
 * @date 2014.10.13 
 */


public class GOauth2Core {
	public static String GET_CODE = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_privateinfo&agentid=AGENT_ID&state=a123#wechat_redirect";
	public static String GET_USERS_INFO = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&userid=USERID";

	/**
	 * 企业获取code地址处理
	 * @param appid 企业的CorpID
	 * @param redirect_uri 授权后重定向的回调链接地址，请使用urlencode对链接进行处理
	 * @param response_type 返回类型，此时固定为：code
	 * @param scope 应用授权作用域，此时固定为：snsapi_base
	 * @param state 重定向后会带上state参数，企业可以填写a-zA-Z0-9的参数值
	 * @param #wechat_redirect 微信终端使用此参数判断是否需要带上身份信息
	 * 员工点击后，页面将跳转至 redirect_uri/?code=CODE&state=STATE，企业可根据code参数获得员工的userid
	 * */
	public static String GetCode(){
		String get_code_url = "";
		get_code_url = GET_CODE.replace("CORPID", ParamesAPI.corpId).replace("REDIRECT_URI", WeixinUtil.URLEncoder(ParamesAPI.REDIRECT_URI)).replace("AGENT_ID", ParamesAPI.AGENT_ID);
		return get_code_url;
	}
	public static String CODE_TO_USERINFO = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE";
	
	/**
	 * 根据code获取成员信息
	 * @param access_token 调用接口凭证
	 * @param code 通过员工授权获取到的code，每次员工授权带上的code将不一样，code只能使用一次，5分钟未被使用自动过期
	 * @param agentid 跳转链接时所在的企业应用ID
	 * 管理员须拥有agent的使用权限；agentid必须和跳转链接时所在的企业应用ID相同
	 * */
	public static JSONObject GetUserID (String access_token,String code ,String agentid){
		String UserId = "";
		CODE_TO_USERINFO = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token="+access_token+"&code="+code;
		JSONObject jsonobject = WeixinUtil.HttpRequest(CODE_TO_USERINFO, "GET", null);
		if(null!=jsonobject){
			if(jsonobject.containsKey("errcode")){
				UserId = jsonobject.getString("UserId"); //到这里应该能获得正确的用户信息了 
				System.out.println("获取信息成功 UserID:"+UserId);
			}else{
				int errorrcode = jsonobject.getInteger("errcode");  
	            String errmsg = jsonobject.getString("errmsg");
	            System.out.println("错误码："+errorrcode+"————"+"错误信息："+errmsg);
			}
		}else{
			System.out.println("获取授权失败");
		}
		return jsonobject;
	}
	
	/***
	 * 获取ticket值
	 * @param access_token
	 * @param code
	 * @return
	 */
	public static JSONObject getTicket (String access_token,String userid){
		GET_USERS_INFO = GET_USERS_INFO.replace("ACCESS_TOKEN", access_token).replace("USERID", userid);
		JSONObject jsonobject = WeixinUtil.HttpRequest(GET_USERS_INFO, "GET", null);
		if(null!=jsonobject){
			if (jsonobject.getString("errcode").equals("0")) {
				//System.out.println("获取用户信息成功---->"+jsonobject.toString());
				System.out.println("微信获取用户信息成功---->");	
			}else{
				int errorrcode = jsonobject.getInteger("errcode");  
	            String errmsg = jsonobject.getString("errmsg");
	            System.out.println("错误码："+errorrcode+"————"+"错误信息："+errmsg);
			}
		}else{
			System.out.println("获取授权失败了");
		}
		return jsonobject;
	}
	
	/***
	 * 获取所有人员的JSON
	 * @param access_token
	 * @param userid
	 * @return
	 */
	public static JSONObject getUserAll (String access_token){
		String url = "https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token="+access_token+"&department_id=1&fetch_child=1&status=0";
		JSONObject jsonobject = WeixinUtil.HttpRequest(url, "GET", null);
		if(null!=jsonobject){
			if (jsonobject.getString("errmsg").equals("ok")) {
				//System.out.println("获取用户信息成功---->"+jsonobject.toString());	
				System.out.println("微信获取用户信息成功---->");	
			}else{
				int errorrcode = jsonobject.getInteger("errcode");  
	            String errmsg = jsonobject.getString("errmsg");
	            System.out.println("错误码："+errorrcode+"————"+"错误信息："+errmsg);
			}
		}else{
			System.out.println("获取授权失败");
		}
		return jsonobject;
	}
	
	/**
	 * 查询员工的usersId
	 * @param phone
	 * @return
	 * @throws IOException
	 */
	public static String getWxUserId(String phone) throws IOException
	{
		AccessToken token = WeChatUtils.getAccessToken();
		JSONObject UserCodeObj = GOauth2Core.getUserAll(token.getToken());  
		JSONArray json = UserCodeObj.getJSONArray("userlist");
		String uersId = "";
		if (json.size() > 0) {
			for (int i = 0; i < json.size(); i++) {
				JSONObject job = json.getJSONObject(i); // 遍历 jsonarray
														// 数组，把每一个对象转成 json 对象
				if(job.getString("mobile").equals(phone))
					uersId = job.getString("userid");
			}
		}
		return uersId;
	}

}
